
// 回顾 C 语言文件操作 , 打开文件 , 写文件 , 读文件 !

#include <stdio.h>
#include <string.h>

//整体 
//要读写一个文件 , 首先要打开一个文件


//////////////////////////////  写文件
//int main()
//{	
//	//以写的方式打开文件 , w 没有文件会创建 , 并且是先清空在写入 
//	FILE* fp = fopen("log.txt" , "w");
//	if(fp == NULL) 
//	{
//		perror("fopen fail!\n");	
//		return 1;
//	}
//	
//	const char* str = "Hello C!\n";	
//
//	//////////  写文件
//
//	// 1 . 用 fwrite , 写的是二进制 
//	//  size_t fwrite(const void *ptr, size_t size, size_t nmemb,  FILE *stream);
//	//                    写的内容       写的大小      每个元素大小  往哪写 
//	fwrite(str , strlen(str) , 1 , fp);	
//
//	// 2 . 显示器打印的本质是什么 ??? 显示器是文件设备 , 本质也是文件 , 所以显示器的打印就是写入显示器 , 文件的写入 !
//	// 所以 , 像文件的写入也可以用打印的方式 .
//	// printf --- 默认是向显示器打印 , 本质是向显示器文件写入 !
//	// fprintf -- 可以指定流文件写入 !
//	// 向 fp 文件写入 str 
//	const char* msg = "I am ....\n";
//	fprintf(fp , "%s" , msg);
//
//	//关闭文件
//	fclose(fp);
//}
//
//
//



/////////////////////////  读文件 

// 读一个文件了 , 那么这个文件一定是存在的 !
int main()
{	
	//以读的方式打开文件	
	FILE* fp = fopen("log.txt" , "r");
	if(fp == NULL)
	{
		perror("fopen!\n");
		return 1;
	}	

	printf("fopen Success !\n");
	// 读文件
	while(1)  // 一直读 , 等读到文件末尾就停止了 
	{
		//	size_t fread(   void *ptr,     size_t size,   size_t nmemb,   FILE *stream);
		// 		      读的内容放这里  每个元素多大字节  读多大          从哪读
		char buff[100];
		memset(buff , 0 , sizeof(buff));
		// 读
		size_t ret = fread(buff , 1 , sizeof(buff) , fp);
		if(ret > 0)
		{
			buff[ret] = 0;//添加 \0 , C 语言中的规定 , 字符串以 \0 结尾
			//读到了打印	
			printf("%s" ,buff);
		}			
		// feof 可判断文件结束
		if(feof(fp)) 
			break; 	
	}
	
	fclose(fp);
	
	return 0;
}




